#ifndef HTTPMGR_H
#define HTTPMGR_H
#include "singleton.h"
#include <QString>
#include <QUrl>
#include <QObject>
#include <QNetworkAccessManager>
#include <QJsonObject>
#include <QJsonDocument>

/******************************************************************************
 *
 * @file       httpmgr.h
 * @brief      网络管理类
 *
 * @author     kiyose
 * @date       2024/08/02
 * @history
 *****************************************************************************/
//CRTP  奇异递归模板
/**
 * @brief HttpMgr 类是管理HTTP请求的单例类。
 *
 * 它使用 Qt 的 QNetworkAccessManager 来发送 HTTP 请求，并处理响应。
 * 该类通过继承 Singleton 模板类来确保全局只有一个实例。
 * 同时，它也支持通过 shared_ptr 进行智能指针操作。
 */
class HttpMgr:public QObject, public Singleton<HttpMgr>,
                public std::enable_shared_from_this<HttpMgr>
{
    Q_OBJECT
public:
    ~HttpMgr();
    void PostHttpReq(QUrl url,QJsonObject json,ReqId req_id,Modules mod);
private:
    friend class Singleton<HttpMgr>;
    HttpMgr();
    QNetworkAccessManager _manager;


private slots:
    void slot_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod);
signals:
    void sig_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod);
    void sig_reg_mod_finish(ReqId id, QString res, ErrorCodes err);
    void sig_reset_mod_finish(ReqId id, QString res, ErrorCodes err);
    void sig_login_mod_finish(ReqId id, QString res, ErrorCodes err);
};

#endif // HTTPMGR_H
